﻿using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using SUT = Admx_Generator;

namespace Tests_AdmxProject
{
    public class Test_AdmxProject
    {
        [TestClass]
        public class Constructor_Should
        {
            private SUT.AdmxProject project;
            private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
            private string projectName = "PstBackup2013";

            [TestInitialize]
            public void BeforeEachTest()
            {
                try
                {
                    System.IO.Directory.Delete(projectFolder, true);
                }
                catch (Exception) { }

                project = new SUT.AdmxProject(projectFolder, projectName);
            }

            [TestMethod]
            public void HaveHasUnSavedModificationsSetToTrue_WhenNewInstanceIsCreated()
            {
                // Assert
                Assert.IsTrue(project.HaveUnsavedModifications);
            }

            [TestMethod]
            public void SetProjectFolder_WhenNewInstanceIsCreated()
            {
                // Assert
                Assert.IsTrue(project.ProjectFolder.Equals(projectFolder));
            }

            [TestMethod]
            public void SetProjectName_WhenNewInstanceIsCreated()
            {
                // Assert
                Assert.IsTrue(project.ProjectName.Equals(projectName));
            }

            [TestMethod]
            public void HaveAdmxPropertieSetToNull_WhenNewInstanceIsCreated()
            {
                // Assert
                Assert.IsTrue(project.Admx == null);
            }
            
            [TestMethod]
            public void HaveHasAdmxSetToFalse_WhenNewInstanceIsCreated()
            {
                // Assert
                Assert.IsTrue(project.HasAdmx == false);
            }
        }

        //[TestClass]
        //public class AddAdml_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void AddOnlyOneLanguage_WhenCalled()
        //    {
        //        // Assert
        //        Assert.IsTrue(project.GetAdmlList().Count == 1);
        //    }

        //    [TestMethod]
        //    public void AddTheRightLanguage_WhenCalled()
        //    {
        //        // Assert
        //        Assert.AreEqual(project.GetAdmlList()[0], admlFile);
        //    }

        //    [TestMethod]
        //    [ExpectedException(typeof(SUT.Exceptions.DuplicateLanguageException))]
        //    public void ThrowDuplicateLanguageException_WhenCalledWithALanguageThatIsAlreadyAdded()
        //    {
        //        // Arrange
        //        SUT.AdmlFile duplicateAdmlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.AddAdml(duplicateAdmlFile);
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModificationsToTrue_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.AdmlFile secondAdmlFile = new SUT.AdmlFile("en-US");

        //        // Act
        //        project.Save();
        //        project.AddAdml(secondAdmlFile);

        //        // Assert
        //        Assert.IsTrue(project.HaveUnsavedModifications);
        //    }
        //}

        //[TestClass]
        //public class RemoveAdmlFile_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void RemoveTheAdmlFile_WhenCalled()
        //    {
        //        // Act
        //        project.RemoveAdml(this.admlFile);

        //        // Assert
        //        Assert.IsFalse(project.GetAdmlList().Contains(admlFile));
        //    }

        //    [TestMethod]
        //    public void RemoveTheRightLanguage_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.AdmlFile secondeLanguage = new SUT.AdmlFile("RU");

        //        // Act
        //        project.AddAdml(secondeLanguage);
        //        project.RemoveAdml(admlFile);

        //        // Assert
        //        Assert.IsTrue(project.GetAdmlList().Contains(secondeLanguage));
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModificationsToTrue_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.AdmlFile secondAdmlFile = new SUT.AdmlFile("en-US");

        //        // Act
        //        project.Save();
        //        project.AddAdml(secondAdmlFile);

        //        // Assert
        //        Assert.IsTrue(project.HaveUnsavedModifications);
        //    }
        //}

        //[TestClass]
        //public class GetFallbackCulture_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void ReturnTheRightCulture_WhenCalled()
        //    {
        //        // Assert                
        //        Assert.IsTrue(project.GetFallbackCulture().Culture.Name == "en-US");
        //    }
        //}

        //[TestClass]
        //public class SetFallbackCulture_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void SetFallbackCultureAccordinglyToTheParameter_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.AdmlFile newFallbackCulture = new SUT.AdmlFile("ru-RU");

        //        // Act
        //        project.SetFallbackCulture(newFallbackCulture);

        //        // Assert
        //        Assert.IsTrue(project.GetFallbackCulture() == newFallbackCulture);
        //        Assert.AreEqual(project.GetFallbackCulture().Culture.Name, newFallbackCulture.Culture.Name);
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModificationsToTrue_WhenCalledWithANewCulture()
        //    {
        //        // Arrange
        //        SUT.AdmlFile newFallbackCulture = new SUT.AdmlFile("ru-RU");

        //        // Act
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetFallbackCulture(newFallbackCulture);

        //        // Assert
        //        Assert.IsTrue(project.HaveUnsavedModifications);
        //    }

        //    [TestMethod]
        //    public void NotChangeHasUnsavedModifications_WhenCalledWithTheSameFallbackCulture()
        //    {
        //        // Arrange
        //        SUT.AdmlFile newFallbackCulture = new SUT.AdmlFile(project.GetFallbackCulture().Culture.Name);

        //        // Act
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetFallbackCulture(newFallbackCulture);

        //        // Assert
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //    }
        //}

        //[TestClass]
        //public class GetRevision_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void ReturnOneDotZero_WhenNewInstanceIsCreated()
        //    {
        //        // Arrange
        //        SUT.Revision actualRevision = project.GetRevision();
        //        SUT.Revision expectedRevision = new SUT.Revision(1, 0);

        //        // Assert
        //        Assert.AreEqual(expectedRevision, actualRevision);
        //    }
        //}

        //[TestClass]
        //public class SetRevision_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void SetRevisionAccordinglyToTheParameter_WhenCalled()
        //    {
        //        // Arrange                
        //        SUT.Revision expectedRevision = new SUT.Revision(2, 4);

        //        // Act
        //        project.SetRevision(expectedRevision);

        //        // Assert
        //        Assert.AreEqual(expectedRevision, project.GetRevision());
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModificationsToTrue_WhenCalled()
        //    {
        //        // Arrange                
        //        SUT.Revision expectedRevision = new SUT.Revision(2, 4);

        //        // Act
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetRevision(expectedRevision);

        //        // Assert
        //        Assert.IsTrue(project.HaveUnsavedModifications);
        //    }

        //    [TestMethod]
        //    public void NotChangeHasUnsavedModifications_WhenCalledWithTheSameRevision()
        //    {
        //        // Arrange                
        //        SUT.Revision expectedRevision = new SUT.Revision(1, 1);

        //        // Act
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetRevision(expectedRevision);

        //        // Assert
        //        Assert.IsFalse(project.HaveUnsavedModifications);

        //    }
        //}

        //[TestClass]
        //public class GetNamespace_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void ReturnTheNamespaceUsedToInitializedTheInstance_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.Namespace expectedNamespace = new SUT.Namespace("EasyCompany.Policie", "PstBackup2013");

        //        // Act
        //        SUT.Namespace actualNamespace = project.GetNamespace();

        //        // Assert
        //        Assert.AreEqual(expectedNamespace, actualNamespace);
        //    }

        //}

        //[TestClass]
        //public class SetNamespace_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void SetTheNamepaceAccordinglyToTheParameter_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.Namespace expectedNamespace = new SUT.Namespace("Contoso.Policie", "NewNamespace");

        //        // Act
        //        project.SetNamespace(expectedNamespace);

        //        // Assert
        //        Assert.AreEqual(expectedNamespace, project.GetNamespace());
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModificationsToTrue_WhenCalledWithANewNamespace()
        //    {
        //        // Arrange
        //        SUT.Namespace expectedNamespace = new SUT.Namespace("Contoso.Policie", "NewNamespace");

        //        // Act
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetNamespace(expectedNamespace);

        //        // Assert
        //        Assert.IsTrue(project.HaveUnsavedModifications);
        //    }

        //    [TestMethod]
        //    public void NotChangeHasUnsavedModifications_WhenCalledWithTheSameNamespace()
        //    {
        //        // Arrange
        //        SUT.Namespace expectedNamespace = new SUT.Namespace("EasyCompany.Policie", "PstBackup2013");

        //        // Act
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetNamespace(expectedNamespace);

        //        // Assert
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //    }
        //}

        //[TestClass]
        //public class GetSupersededAdm_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void ReturnTheCorrectSupersededAdm_WhenCalled()
        //    {
        //        // Arrange
        //        string expectedSupersededAdm = "test.adm";
        //        string actualSupersededAdm = String.Empty;

        //        // Act
        //        project.SetSupersededAdm(expectedSupersededAdm);
        //        actualSupersededAdm = project.GetSupersededAdm();

        //        // Assert
        //        Assert.AreEqual(expectedSupersededAdm, actualSupersededAdm);
        //    }
        //}

        //[TestClass]
        //public class SetSupersededAdmx_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void SetSupersededAdmAccordinglyToTheParameter_WhenCalled()
        //    {
        //        // Arrange
        //        string supersededAdm = "test.adm";

        //        // Act
        //        project.SetSupersededAdm(supersededAdm);

        //        // Assert
        //        Assert.AreEqual(supersededAdm, project.GetSupersededAdm());
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModifiationsToTrue_WhenCalledWithAnotherSupersededAdmFilename()
        //    {
        //        // Arrange
        //        string supersededAdm = "test.adm";

        //        // Act
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetSupersededAdm(supersededAdm);

        //        // Assert
        //        Assert.IsTrue(project.HaveUnsavedModifications);
        //    }

        //    [TestMethod]
        //    public void NotChangeHasUnsavedModifications_WhenCalledWithTheSameSupersededAdmFilename()
        //    {
        //        // Arrange
        //        string supersededAdm = "test.adm";

        //        // Act
        //        project.SetSupersededAdm(supersededAdm);
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetSupersededAdm(supersededAdm);

        //        // Assert
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //    }
        //}

        //[TestClass]
        //public class GetMinRequiredRevision_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void ReturnTheCorrectMinRequiredRevision_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.Revision expectedRevision = new SUT.Revision(1, 0);
                
        //        // Assert
        //        Assert.AreEqual(expectedRevision, project.GetMinRequiredRevision());
        //    }
        //}

        //[TestClass]
        //public class SetMinRequiredRevision_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void SetMinRequiredRevisionAccordinglyToTheParameter_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.Revision expectedRevision = new SUT.Revision(2, 3);

        //        // Act
        //        project.SetMinRequiredRevision(expectedRevision);

        //        // Assert
        //        Assert.AreEqual(expectedRevision, project.GetMinRequiredRevision());                
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModificationsToTrue_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.Revision expectedRevision = new SUT.Revision(2, 3);

        //        // Act
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetMinRequiredRevision(expectedRevision);

        //        // Assert
        //        Assert.IsTrue(project.HaveUnsavedModifications);
        //    }

        //    [TestMethod]
        //    public void NotChangeHasUnsavedModifications_WhenCalledWithTheSameMinRequiredRevision()
        //    {
        //        // Arrange
        //        SUT.Revision expectedRevision = project.GetMinRequiredRevision();

        //        // Act
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetMinRequiredRevision(expectedRevision);

        //        // Assert
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //    }
        //}

        //[TestClass]
        //public class GetUsedNamespace_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void ReturnAllUsedNamespaces_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.Namespace expectedNamespace1 = new SUT.Namespace("EasyCompany.Policie.Namespace1", "Namespace1");
        //        SUT.Namespace expectedNamespace2 = new SUT.Namespace("EasyCompany.Policie.Namespace2", "Namespace2");

        //        // Act
        //        project.AddUsedNamespace(expectedNamespace1);
        //        project.AddUsedNamespace(expectedNamespace2);

        //        // Assert
        //        Assert.AreEqual(project.GetUsedNamespaces().Count, 2);
        //        Assert.IsTrue(project.GetUsedNamespaces().Contains(expectedNamespace1));
        //        Assert.IsTrue(project.GetUsedNamespaces().Contains(expectedNamespace2));
        //    }
        //}

        //[TestClass]
        //public class AddUsedNamespace_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void NotAddTheNamespace_WhenCalledWithAnAlreadyIncludedNamespace()
        //    {
        //        // Arrange
        //        SUT.Namespace expectedNamespace1 = new SUT.Namespace("EasyCompany.Policie.Namespace1", "Namespace1");

        //        // Act
        //        project.AddUsedNamespace(expectedNamespace1);
        //        Assert.IsTrue(project.GetUsedNamespaces().Contains(expectedNamespace1));
        //        Assert.AreEqual(project.GetUsedNamespaces().Count, 1);
        //        project.AddUsedNamespace(expectedNamespace1);

        //        // Assert
        //        Assert.AreEqual(project.GetUsedNamespaces().Count, 1);
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModifications_WhenAddingANewNamespace()
        //    {
        //        // Arrange
        //        SUT.Namespace expectedNamespace1 = new SUT.Namespace("EasyCompany.Policie.Namespace1", "Namespace1");

        //        // Act
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.AddUsedNamespace(expectedNamespace1);

        //        // Assert
        //        Assert.IsTrue(project.HaveUnsavedModifications);
        //    }

        //    [TestMethod]
        //    public void NotChangeHasUnsavedModifications_WhenCalledWithAnAlreadyIncludedNamespace()
        //    {
        //        // Arrange
        //        SUT.Namespace expectedNamespace1 = new SUT.Namespace("EasyCompany.Policie.Namespace1", "Namespace1");

        //        // Act
        //        project.AddUsedNamespace(expectedNamespace1);
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.AddUsedNamespace(expectedNamespace1);

        //        // Assert
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //    }
        //}

        //[TestClass]
        //public class EditUsedNamespace_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }
            
        //    [TestMethod]
        //    public void ChangeThePrefixOfTheNamespace_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.Namespace newNamespace1 = new SUT.Namespace("EasyCompany.Policie.Namespace1", "Namespace1");
        //        SUT.Namespace newNamespace2 = new SUT.Namespace("EasyCompany.Policie.Namespace2", "Namespace2");

        //        // Act
        //        project.AddUsedNamespace(newNamespace1);
        //        project.AddUsedNamespace(newNamespace2);
        //        SUT.Namespace expectedNamespace1 = project.EditUsedNamespace(newNamespace1, "NewPrefix1");
        //        SUT.Namespace expectedNamespace2 = project.EditUsedNamespace(newNamespace2, "NewPrefix2");
               
        //        // Assert
        //        Assert.AreEqual(project.GetUsedNamespaces()[0].Prefix, expectedNamespace1.Prefix);
        //        Assert.AreEqual(project.GetUsedNamespaces()[1].Prefix, expectedNamespace2.Prefix);
        //    }

        //    [TestMethod]
        //    public void ReturnTheNewNamespace_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.Namespace newNamespace1 = new SUT.Namespace("EasyCompany.Policie.Namespace1", "Namespace1");
        //        SUT.Namespace expectedNamespace;
        //        SUT.Namespace actualNamespace;

        //        // Act
        //        project.AddUsedNamespace(newNamespace1);
        //        expectedNamespace = project.EditUsedNamespace(newNamespace1, "Prefix1");
        //        actualNamespace = project.GetUsedNamespaces()[0];

        //        // Assert
        //        Assert.AreEqual(expectedNamespace.Prefix, actualNamespace.Prefix);
        //        Assert.AreEqual(expectedNamespace.Target, actualNamespace.Target);
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModificationsToTrue_WhenChangingThePrefixOfTheNamespace()
        //    {
        //        // Arrange
        //        SUT.Namespace newNamespace1 = new SUT.Namespace("EasyCompany.Policie.Namespace1", "Namespace1");

        //        // Act
        //        project.AddUsedNamespace(newNamespace1);
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.EditUsedNamespace(newNamespace1, "Prefix1");

        //        // Assert
        //        Assert.IsTrue(project.HaveUnsavedModifications);
        //    }

        //    [TestMethod]
        //    public void NotChangeHasUnsavedModifications_WhenCalledWithANamespaceNotInclude()
        //    {
        //        // Arrange
        //        SUT.Namespace newNamespace1 = new SUT.Namespace("EasyCompany.Policie.Namespace1", "Namespace1");
        //        SUT.Namespace newNamespace2 = new SUT.Namespace("EasyCompany.Policie.Namespace2", "Namespace2");

        //        // Act
        //        project.AddUsedNamespace(newNamespace1);
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.EditUsedNamespace(newNamespace2, "Prefix2");

        //        // Assert
        //        Assert.IsFalse(project.HaveUnsavedModifications);

        //    }

        //}

        //[TestClass]
        //public class RemoveUsedNamespace_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }
            
        //    [TestMethod]
        //    public void RemoveTheProvidedNamespace_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.Namespace newNamespace1 = new SUT.Namespace("EasyCompany.Policie.Namespace1", "Namespace1");

        //        // Act
        //        project.AddUsedNamespace(newNamespace1);
        //        Assert.IsTrue(project.GetUsedNamespaces().Contains(newNamespace1));
        //        project.RemoveUsedNamespace(newNamespace1);

        //        // Assert
        //        Assert.IsFalse(project.GetUsedNamespaces().Contains(newNamespace1));
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModifications_RemovingAUsedNamespace()
        //    {
        //        // Arrange
        //        SUT.Namespace newNamespace1 = new SUT.Namespace("EasyCompany.Policie.Namespace1", "Namespace1");

        //        // Act
        //        project.AddUsedNamespace(newNamespace1);
        //        Assert.IsTrue(project.GetUsedNamespaces().Contains(newNamespace1));
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.RemoveUsedNamespace(newNamespace1);

        //        // Assert
        //        Assert.IsTrue(project.HaveUnsavedModifications);
        //    }

        //    [TestMethod]
        //    public void NotChangeHasUnsavedModifications_WhenTryingToRemoveANamespaceNotInUse()
        //    {
        //        // Arrange
        //        SUT.Namespace newNamespace1 = new SUT.Namespace("EasyCompany.Policie.Namespace1", "Namespace1");
        //        SUT.Namespace newNamespace2 = new SUT.Namespace("EasyCompany.Policie.Namespace2", "Namespace2");

        //        // Act
        //        project.AddUsedNamespace(newNamespace1);
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.RemoveUsedNamespace(newNamespace2);

        //        // Assert
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //    }
        //}

        //[TestClass]
        //public class GetSupportedOn_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }
            
        //    [TestMethod]
        //    public void ReturnTheSupportedOnItem_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.SupportedOnItem expectedSupportedOnItem = new SUT.SupportedOnItem(new SUT.Namespace("EasyCompany.Policy", "Prefix"));
        //        SUT.SupportedOnItem actualSupportedOnItem;
                
        //        // Act
        //        project.SetSupportedOn(expectedSupportedOnItem);
        //        actualSupportedOnItem = project.GetSupportedOn();

        //        // Assert
        //        Assert.AreEqual(expectedSupportedOnItem, actualSupportedOnItem);
        //    }
        //}

        //[TestClass]
        //public class SetSupportedOnItem_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }

        //    [TestMethod]
        //    public void SetTheProvidedSupportedOnItem_WhenCalled()
        //    {
        //        // Arrange
        //        SUT.SupportedOnItem expectedSupportedOn = new SUT.SupportedOnItem(new SUT.Namespace("EasyCompany.Policy", "Prefix"));
        //        SUT.SupportedOnItem actualSupportedOn;

        //        // Act
        //        project.SetSupportedOn(expectedSupportedOn);
        //        actualSupportedOn = project.GetSupportedOn();

        //        // Assert
        //        Assert.AreEqual(expectedSupportedOn, actualSupportedOn);
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModificationsToTrue_WhenSettingTheSupportedOn()
        //    {
        //        // Arrange
        //        SUT.SupportedOnItem expectedSupportedOn = new SUT.SupportedOnItem(new SUT.Namespace("EasyCompany.Policy", "Prefix"));

        //        // Act
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetSupportedOn(expectedSupportedOn);

        //        // Assert
        //        Assert.IsTrue(project.HaveUnsavedModifications);
        //    }

        //    [TestMethod]
        //    public void NotChangeHasUnsavedModifications_WhenTryingToSetTheSameSupportedOn()
        //    {
        //        // Arrange
        //        SUT.SupportedOnItem supportedOn1 = new SUT.SupportedOnItem(new SUT.Namespace("EasyCompany.Policy", "Prefix"));

        //        // Act
        //        project.SetSupportedOn(supportedOn1);
        //        project.Save();
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //        project.SetSupportedOn(supportedOn1);

        //        // Assert
        //        Assert.IsFalse(project.HaveUnsavedModifications);
        //    }
        //}

        //[TestClass]
        //public class GetAdmxFilename_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }
            
        //    [TestMethod]
        //    public void ReturnTheFilenameOfTheAdmx_WhenCalled()
        //    {
        //        // Arrange
        //        string expected = "PST Backup 2013";
        //        string actual;
                
        //        // Act
        //        actual = project.GetAdmxFilename();

        //        // Assert
        //        Assert.AreEqual(expected, actual);
        //    }
        //}

        //[TestClass]
        //public class CategoryExist_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }
            
        //    [TestMethod]
        //    public void ReturnTrue_WhenTheProjectContainsThatCategory()
        //    {
        //        // Arrange
        //        SUT.Category firstCategory = new SUT.Category("category1");

        //        // Act
        //        project.AddCategory(firstCategory);

        //        // Assert
        //        Assert.IsTrue(project.CategoryExists(firstCategory));
        //    }

        //    [TestMethod]
        //    public void ReturnFalse_WhenTheProjectDontContainsThatCategory()
        //    {
        //        // Arrange
        //        SUT.Category firstCategory = new SUT.Category("category1");

        //        // Assert
        //        Assert.IsFalse(project.CategoryExists(firstCategory));
        //    }
        //}

        //[TestClass]
        //public class AddCategory_Should
        //{
        //    private SUT.AdmxProject project;
        //    private SUT.AdmxFile admxFile;
        //    private SUT.AdmlFile admlFile;
        //    private string projectFolder = @"C:\Temp\AdmxTest\PstBackup2013";
        //    private string projectName = "PstBackup2013";

        //    [TestInitialize]
        //    public void BeforeEachTest()
        //    {
        //        try
        //        {
        //            System.IO.Directory.Delete(projectFolder, true);
        //        }
        //        catch (Exception) { }

        //        // Arrange
        //        project = new SUT.AdmxProject(projectFolder, projectName);
        //        admxFile = new SUT.AdmxFile("PST Backup 2013", new SUT.Namespace("EasyCompany.Policie", "PstBackup2013"), new SUT.culture(new System.Globalization.CultureInfo("en-US")));
        //        admlFile = new SUT.AdmlFile("fr-FR");

        //        // Act
        //        project.SetAdmx(admxFile);
        //        project.AddAdml(admlFile);
        //    }
            
        //    [TestMethod]
        //    public void AddTheProvidedCategory_WhenCalledWithANewCategory()
        //    {
        //        // Arrange
        //        SUT.Category newCategory = new SUT.Category("MyCategory");

        //        // Act
        //        this.project.AddCategory(newCategory);

        //        // Assert
        //        Assert.IsTrue(this.project.CategoryExists(newCategory));
        //    }

        //    [TestMethod]
        //    public void SetHasUnsavedModifications_WhenAddingANewCategory()
        //    {
        //        // Arrange
        //        SUT.Category newCategory = new SUT.Category("MyCategory");

        //        // Act
        //        this.project.Save();
        //        Assert.IsFalse(this.project.HaveUnsavedModifications);
        //        this.project.AddCategory(newCategory);

        //        // Assert
        //        Assert.IsTrue(this.project.HaveUnsavedModifications);
        //    }

        //    [TestMethod]
        //    public void NotChangeHasUnsavedModifications_WhenTryingToAddACategoryAlreadyAdded()
        //    {
        //        // Arrange
        //        SUT.Category newCategory = new SUT.Category("MyCategory");

        //        // Act
        //        this.project.AddCategory(newCategory);
        //        this.project.Save();
        //        Assert.IsFalse(this.project.HaveUnsavedModifications);
        //        this.project.AddCategory(newCategory);

        //        // Assert
        //        Assert.IsFalse(this.project.HaveUnsavedModifications);
        //    }
        //}

    }
}
